package com.snj.test;

import java.util.ArrayList;
import java.util.List;

public class GroupAssignment {

    public static void main(String[] args) {
        // 部门人数可以是任意值
        int constructionDept = 25;  // 示例: 施工部门人数
        int serviceDept = 22;       // 示例: 服务部门人数

        // 施工部门分组
        List<Integer> constructionGroups = divideAndRebalance(constructionDept);

        // 服务部门分组
        List<Integer> serviceGroups = divideAndRebalance(serviceDept);

        // 显示分组结果
        System.out.println("施工部门分组: " + constructionGroups);
        System.out.println("服务部门分组: " + serviceGroups);
    }

    // 通用部门分组逻辑，适用于任意人数
    private static List<Integer> divideAndRebalance(int people) {
        List<Integer> groups = new ArrayList<>();

        // 优先分出13人一组
        while (people >= 13) {
            groups.add(13);
            people -= 13;
        }

        // 处理剩余人数
        if (people > 0) {
            if (people >= 11) { // 如果剩余人数大于等于11，则分为11和剩余
                groups.add(11);
                people -= 11;
            } else if (people == 10) { // 如果剩余10人，拆分成两组5人
                groups.add(5);
                groups.add(5);
                people -= 10;
            } else if (people == 9 || people == 7) { // 9人或7人直接作为一组
                groups.add(people);
                people = 0;
            } else if (people == 8) { // 8人拆分成5人和3人
                groups.add(5);
                groups.add(3);
                people -= 8;
            } else if (people == 6) { // 6人拆分成5人和1人
                groups.add(5);
                people -= 5;
                if (people == 1) { // 处理剩余的1人
                    rebalance(groups, 1);
                    people = 0;
                }
            } else if (people == 5) { // 5人直接作为一组
                groups.add(5);
                people = 0;
            } else if (people <= 4) { // 1到4人需要重新平衡
                rebalance(groups, people);
                people = 0;
            }
        }

        return groups;
    }

    // 重新平衡，将剩余人数加入现有组并确保符合规则
    private static void rebalance(List<Integer> groups, int remaining) {
        for (int i = 0; i < groups.size(); i++) {
            if (groups.get(i) + remaining <= 13) {
                groups.set(i, groups.get(i) + remaining);
                return;
            }
        }

        // 如果无法直接加入现有组，则进行更复杂的重新分配
        if (remaining > 0) {
            for (int i = 0; i < groups.size(); i++) {
                int newSize = groups.get(i) + remaining;
                if (newSize > 13) {
                    // 分成两组
                    int excess = newSize - 13;
                    groups.set(i, 13);
                    groups.add(excess);
                    return;
                }
            }
        }
    }
}